module sys_rst #(parameter RST_TIME = 250_000_000)(//5s

    input               clk     ,
    input               rst_n   ,

    output              start
);

//信号定义
    reg     [31:0]      cnt     ;
    wire                add_cnt ;
    wire                end_cnt ;
    reg                 flag    ;
    reg                 reset   ;

//计数器   
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt <= 0;
        end
        else if(add_cnt)begin
            if(end_cnt)
                cnt <= 0;
            else
                cnt <= cnt + 1;
        end
    end

    assign add_cnt = ~flag;  //系统复位低电平时开始计数     
    assign end_cnt = add_cnt && cnt == RST_TIME-1; //5s钟  

    always  @(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            flag <= 1'b0;
        end
        else if(end_cnt)begin
            flag <= 1'b1;
        end
    end

    always  @(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            reset <= 0;
        end
        //小于1/2(2.5s)大于1/4(1.25s)，系统复位必须再这个时间段，reset再1.25后低电平
        else if(cnt > (RST_TIME >> 2) && cnt < (RST_TIME >> 1))begin
            reset <= 1'b0;
        end
        else begin
            reset <= 1'b1;
        end
    end

    assign start = reset;

endmodule 
